// hdu5212
// 题意：给定n(<=10000)个不超过10000的数，现在求设任意i, j，有
//       t[i, j] = gcd(a[i], a[j])，要求t[i, j] * (t[i, j] - 1)的和。
//       结果模10007。
//
// 题解：容斥原理。先预处理出所有数的因子。然后对于每组输入算出每个因子
//       有的数的个数。然后把每个count[i]都平方，因为i, j可以取相同。
//       然后从大往小枚举当前gcd的值i，答案加上count[i]*i*(i-1)。
//       然后对于i的所有因子j，count[j] -= count[i]。
//
// run: $exec < input
#include <iostream>
#include <cstring>
#include <vector>

int const maxn = 10007;
int const   mo = 10007;
long long count[maxn];
std::vector<int> fact[maxn];
int n;

int main()
{
	std::ios::sync_with_stdio(false);
	for (int i = 2; i < maxn; i++)
		for (int j = i; j < maxn; j += i) fact[j].push_back(i);

	while (std::cin >> n) {
		std::memset(count, 0, sizeof(count));
		for (int i = 0, x; i < n; i++) {
			std::cin >> x;
			for (int j = 0; j < (int)fact[x].size(); j++)
				count[fact[x][j]]++;
		}
		long long ans = 0;
		for (int i = 0; i < maxn; i++) count[i] *= count[i];
		for (int i = maxn - 1; i >= 2; i--) {
			ans += count[i] * i * (i - 1);
			ans %= mo;
			for (int j = 0; j < (int)fact[i].size(); j++)
				count[fact[i][j]] -= count[i];
		}
		std::cout << ans << '\n';
	}
}

